home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / e / emodls01.lha / emodules / unpack / unpacker.e < prev   
Text File  |  1980-07-16  |  4KB  |  150 lines

  1. OPT PREPROCESS
  2.  
  3. /*
  4. *-- AutoRev header do NOT edit!
  5. *
  6. *   Project         :   file decruncher based on unpack.library
  7. *   File            :   unpacker.e
  8. *   Copyright       :   © 1996 Piotr Gapinski
  9. *   Author          :   Piotr Gapinski
  10. *   Creation Date   :   05.01.96
  11. *   Current version :   1.0
  12. *   Translator      :   AmigaE v3.1+
  13. *
  14. *   REVISION HISTORY
  15. *
  16. *   Date          Version         Comment
  17. *   ---------     -------         ------------------------------------------
  18. *   05.01.96      1.0             LHA,LZH,DMS not supported
  19. *
  20. *-- REV_END --*
  21. */
  22.  
  23. MODULE 'dos/dos',
  24.        'libraries/unpack','unpack',
  25.        'tools/exceptions','other/ecode'
  26.  
  27. #define PROGRAMVERSION '$VER: unpacker 1.0 (05.01.96)'
  28.  
  29. ENUM ERR_OK,ERR_ARGS,ERR_NOLIB,ERR_STRUCT,ERR_NOMEM,ERR_UNPACK,
  30.      ERR_WRITE,ERR_FILE
  31. ENUM ARG_FILE,ARG_TO,ARG_QUIET,NUMARGS
  32.  
  33. PROC main() HANDLE
  34.   DEF rdargs=0,args[NUMARGS]:LIST,templ,quiet,
  35.       info=NIL:PTR TO unpackinfo,
  36.       filename[208]:STRING,pathname[208]:STRING
  37.  
  38.   templ:='FILE/A,TO/A,QUIET/S'
  39.   IF (rdargs:=ReadArgs(templ,args,NIL))=NIL THEN Raise(ERR_ARGS)
  40.   StrCopy(filename,args[ARG_FILE])
  41.   StrCopy(pathname,args[ARG_TO])
  42.   quiet:=IF args[ARG_QUIET]<>0 THEN TRUE ELSE FALSE
  43.   FreeArgs(rdargs)
  44.  
  45.   IF (unpackbase:=OpenLibrary(UNPACKNAME,39))=NIL THEN Raise(ERR_NOLIB)
  46.   IF (info:=UpAllocCInfo())=NIL THEN Raise(ERR_STRUCT)
  47.  
  48.   info.flag:=UFN_ONEFILE
  49.   info.path:=pathname
  50.   info.jump:=eCode({scan})
  51.   info.trackjump:=0
  52.   info.userdata:=info
  53.   IF (UpDetermineFile(info,filename))=NIL THEN Raise(ERR_UNPACK)
  54.  
  55.   IF (UpUnpack(info))=NIL THEN Raise(ERR_UNPACK)
  56.   IF quiet=FALSE THEN showinfo(info)
  57. EXCEPT DO
  58.   IF exception
  59.     SELECT exception
  60.     CASE ERR_ARGS
  61.       WriteF('Bad args!!! (try "unpacker ?")\n')
  62.     CASE ERR_NOLIB
  63.       WriteF('You need the \s V39+\n',UNPACKNAME)
  64.     CASE ERR_STRUCT
  65.       WriteF('No free memory!\n')
  66.     CASE ERR_NOMEM
  67.       WriteF('No free memory!\n')
  68.     CASE ERR_UNPACK
  69.       WriteF('Error: \s\n',info.errormsg)
  70.     DEFAULT
  71.       report_exception()
  72.       WriteF('LEVEL: main()\n')
  73.     ENDSELECT
  74.   ENDIF
  75.   IF info THEN UpFreeCInfo(info)
  76.   IF unpackbase THEN CloseLibrary(unpackbase)
  77. ENDPROC
  78.  
  79. PROC showinfo(info:PTR TO unpackinfo)
  80.   DEF crunchtype,typename
  81.  
  82.   WriteF(' FILENAME: \s\n',info.filename)
  83.   WriteF('COPIED TO: \s\n',info.path)
  84.   crunchtype:=info.crunchtype
  85.   SELECT crunchtype
  86.   CASE CRU_ARCHIVE
  87.     typename:='Archive (Lha, Zoo Etc.)'
  88.   CASE CRU_DATA
  89.     typename:='Data File'
  90.   CASE CRU_OBJECT
  91.     typename:='Object File'
  92.   CASE CRU_OBJECT2
  93.     typename:='2 Segment Object File'
  94.   CASE CRU_TRACK
  95.     typename:='Track File (DMS)'
  96.   DEFAULT
  97.     typename:='UNKNOWN'
  98.   ENDSELECT
  99.   WriteF(' FILETYPE: \s\n',typename)
  100.   WriteF(' FILESIZE: \d (crunched), \d (original)\n',
  101.             info.crunchlen,info.decrunchlen)
  102.   WriteF(' CRUNCHED: \s\n\n',info.crunchername)
  103. ENDPROC
  104.  
  105. PROC scan() HANDLE
  106.   DEF size=0,handle=0,i,len,
  107.       sname[218]:STRING,dname[218]:STRING,temp[40]:STRING,
  108.       info=NIL:PTR TO unpackinfo
  109.  
  110.   MOVE.L A1,info
  111.   IF (info.crunchtype=CRU_ARCHIVE) OR
  112.      (info.crunchtype=CRU_TRACK) THEN RETURN
  113.  
  114.   IF info.usefilenamepointer<>0
  115.     StrCopy(sname,info.loadnamepoi)
  116.   ELSE
  117.     StrCopy(sname,info.filename)
  118.   ENDIF
  119.   StrCopy(dname,info.path)
  120.   len:=EstrLen(sname)
  121.   FOR i:=len TO 0 STEP -1
  122.     EXIT (sname[i]="/") OR (sname[i]=":")
  123.   ENDFOR
  124.   MidStr(temp,sname,i+1,len-i+1)
  125.   StrAdd(dname,temp)
  126.  
  127.   IF (handle:=Open(dname,MODE_NEWFILE))=NIL THEN Raise(ERR_FILE)
  128.   size:=info.decrunchlen
  129.   IF (Write(handle,info.decrunchadr,size))<>size THEN Raise(ERR_WRITE)
  130. EXCEPT DO
  131.   IF handle THEN Close(handle)
  132.   IF exception
  133.     SELECT exception
  134.     CASE ERR_FILE
  135.       WriteF('Can\at create file \s!\n',dname)
  136.     CASE ERR_WRITE
  137.       WriteF('Error while writing to file \s!\n',dname)
  138.     DEFAULT
  139.       report_exception()
  140.       WriteF('LEVEL: scan()\n')
  141.     ENDSELECT
  142.   ENDIF
  143. ENDPROC
  144.  
  145. CHAR PROGRAMVERSION,0
  146. /*EE folds
  147. -1
  148. 79 23 82 37 
  149. EE folds*/
  150.